Enumeración
Una enumeración es un tipo de datos definido por el usuario compuesto por una lista de miembros separados por comas (valores de enumeración) para declarar variables definidas por el usuario.
Declaras una enumeración en un DUT objeto, que ya ha creado en el proyecto haciendo clic Agregar objeto.
En el código de la aplicación, puede usar los componentes de enumeración como constantes cuyo identificador <enumeration name>.<component name>
es reconocido a nivel mundial en el proyecto.
Para obtener más información, consulte: DUT
Declaración
Sintaxis
{attribute 'strict'}
TYPE <enumeration name> :
(
<member name> := <value>
) <base data type> := <initialization> ;
END_TYPE
| Opcional El pragma tiene el efecto de realizar una prueba de tipo estricta como se describe a continuación. El pragma es opcional, pero recomendado. |
| Nombre de la enumeración que se puede utilizar en el código como tipo de datos Ejemplo: |
| Cualquier número de miembros, pero al menos dos miembros Una enumeración es una lista de nombres de miembros separados por comas entre corchetes. El último miembro antes del corchete de cierre no necesita una coma. Todos los miembros tienen el mismo tipo de datos Los valores de los miembros se inicializan automáticamente: a partir de 0, los valores se incrementan continuamente en 1. También puede asignar explícitamente un valor inicial fijo a los miembros individuales Ejemplo: |
| Opcional Puede asignar explícitamente uno de los siguientes tipos de datos base:
Predeterminado: |
| Opcional Uno de los miembros puede declararse explícitamente como miembro inicial. Predeterminado: si no se especifica explícitamente una inicialización, la inicialización se realiza automáticamente con el miembro superior. |
{attribute 'qualified_only'} {attribute 'strict'} TYPE COLOR_BASIC : ( yellow, green, blue, black ) // Basic data type is INT, default initialization for all COLOR_BASIC variables is yellow ; END_TYPE
Enumeración con tipo de datos básico explícito
Extensiones del estándar IEC 61131-3
El tipo de datos básico para una declaración de enumeración es INT
por defecto. Sin embargo, también puede declarar enumeraciones que se basan explícitamente en otro tipo de datos enteros.
Enumeración con tipo de datos base DWORD
TYPE COLOR : ( white := 16#FFFFFF00, yellow := 16#FFFFFF00, green := 16#FF00FF00, blue := 16#FF0000FF, black := 16#88000000 ) DWORD := black ; // Basic data type is DWORD, default initialization for all COLOR variables is black END_TYPE
Reglas de programación estrictas
Importante
En CODESYS V3.5 SP7 y superior, el pragma {attribute 'strict'}
se agrega automáticamente en la primera línea al declarar una enumeración.
Las estrictas reglas de programación se activan al agregar el pragma {attribute 'strict'}
.
Operaciones aritméticas con componentes de enumeración
Por ejemplo, una variable de enumeración no se puede utilizar como variable de contador en un
FOR
círculo.Asignación de un valor constante, que no corresponde a un valor de enumeración, a un componente de enumeración
Asignación de una variable no constante, que tiene otro tipo de datos como enumeración, a un componente de enumeración
Las operaciones aritméticas pueden dar lugar a que se asignen valores no declarados a los componentes de la enumeración. Un mejor estilo de programación es usar SWITCH
/CASE
instrucciones para procesar los valores de los componentes.
Declaración e inicialización de variables de enumeración
Sintaxis
<variable name> : <enumeration name> := <initialization> ;
En el caso de una declaración de una variable de enumeración con una enumeración definida por el usuario, la variable se puede inicializar con un miembro de enumeración.
PROGRAM PLC_PRG VAR colorCar: COLOR; colorTaxi : COLOR := COLOR.yellow; END_VAR
La variable colorCar
se inicializa con COLOR.black
. Esa es la inicialización predeterminada para todas las variables de enumeración de tipo COLOR
y definido de esta manera en la declaración de tipo. La variable colorTaxi
tiene su propia inicialización.
Si no se especifican inicializaciones, entonces el valor de inicialización es 0.
PROGRAM PLC_PRG VAR cbFlower : COLOR_BASIC; cbTree: COLOR_BASIC := COLOR_BASIC.green; END_VAR
La variable cbFlower
se inicializa con COLOR_BASIC.yellow
. Esa es la inicialización predeterminada para todas las variables de enumeración de tipo COLOR_BASIC
. Dado que la declaración de enumeración no especifica un componente para la inicialización, el sistema se inicializa automáticamente con el componente que tiene el valor 0. Este suele ser el primero de los componentes de enumeración. Sin embargo, también puede ser otro componente que no esté en la primera posición pero explícitamente inicializado con 0.
La variable cbTree
tiene una inicialización explícita.
Si no se especifica ningún valor para el tipo y la variable, se aplica la siguiente regla: si una enumeración contiene un valor para 0, entonces este valor es la inicialización predeterminada y, si no, el primer componente de la lista.
Inicialización con el componente 0
TYPE ENUM : ( e1 := 2, e2 := 0, e3 ) ; END_TYPE PROGRAM PLC_PRG VAR e : ENUM; END_VAR
La variable e
se inicializa con ENUM.e2
.
Inicialización con el primer componente
TYPE ENUM2 : ( e1 := 3, e2 := 1, e3 ) ; END_TYPE PROGRAM PLC_PRG VAR e2 : ENUM2; END_VAR
La variable e2
se inicializa con ENUM.e1
.
Acceso único a los componentes de enumeración
Extensiones del estándar IEC 61131-3
Los componentes de enumeración también se pueden utilizar como variables constantes con el identificador <enumeration name>.<component name>
. Los componentes de enumeración son reconocidos globalmente en el proyecto y el acceso a ellos es único. Por lo tanto, un nombre de componente se puede utilizar en diferentes enumeraciones.
Componente blue
PROGRAM PLC_PRG VAR cbFlower : COLOR_BASIC; colorCar : COLOR; END_VAR (* unambiguous identifiers although the component names are identical *) cbFlower := COLOR_BASIC.blue; colorCar := COLOR.blue; (* invalid code *) cbFlower := blue; colorCar := blue;
Para más información, ver: espacio de nombres de enumeración.